"""
Регистрация при необходимости.
Загружает куки. Собирает ссылки на вакансии
Удаляет старые вакансии
Собирает описание вакансий
Удаляет организации без телефонов.
Удаляет дубли по телефонам и запрещенные организации.
Сливает вакансии в общую таблицу.
Ссылки на вакансии из рабочей таблицы добавляются в архив ссылок
Запоминает куки и выходит.
"""

import sys
import os
import logging                                                                  # запись логов
import re                                                                       # регулярные выражения
import sqlite3


from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *



def main():

    """
    """

    app = QApplication(sys.argv)

    logging.basicConfig(filename='log.txt',level=logging.DEBUG,
        format = u'%(filename)s[LINE:%(lineno)d]# %(levelname)-8s %(message)s')

    conn = sqlite3.connect("data.db", isolation_level = None)

    query = conn.cursor()
    update = conn.cursor()

    query.execute("CREATE TABLE IF NOT EXISTS source "
        "(date TEXT DEFAULT '', org TEXT DEFAULT '', sum REAL DEFAULT 0.0);")

    query.execute("CREATE TABLE IF NOT EXISTS abc "
        "(org TEXT DEFAULT '', sum REAL DEFAULT 0.0, proc1 REAL DEFAULT 0.0, proc2 REAL DEFAULT 0.0,"
        "ABC TEXT DEFAULT '');")

    # read_csv(conn)
    # quit()
    
    from statistics import mean, stdev
 
    query.execute("CREATE TABLE IF NOT EXISTS xyz "
        "(org TEXT DEFAULT '', V REAL DEFAULT 0.0, XYZ TEXT DEFAULT '');")

    query2 = conn.cursor()

    query.execute("SELECT org FROM source GROUP BY org")
    for org in query:
        query2.execute("SELECT sum FROM source WHERE org = ?",(org))
        data = []
        for sum in query2:
            data.append(sum[0])
        if len(data) < 2: continue
        adv = mean(data)
        sdev = stdev(data)
        V = sdev * 100.0 / adv
        if V <= 15.0:
            XYZ = 'X'
        elif V > 50.0:
            XYZ = 'Z'
        else:
            XYZ = 'Y'
        sql = ("INSERT INTO xyz (org, V, XYZ) "
            "VALUES (?,?,?);")
        print(org[0], V, XYZ)
        update.execute(sql,(org[0], V, XYZ))

    
    
    
    
    
    
    
    
    
    
    # sys.exit(app.exec_())


def read_csv(conn):

    """ ЧТЕНИЕ CSV ФАЙЛА.
    -- Находим путь до рабочего стола. Открываем диалог открытия файла.
    -- Записываем file_name во внутреннюю переменную."""

    user_profile = os.environ['USERPROFILE']
    user_desktop = user_profile + "/Desktop"
    url, filter  = QFileDialog.getOpenFileName(None,
        caption="Заголовок окна", directory=user_desktop,
        filter="csv(*.csv)")

    update = conn.cursor()
    pattern_date = re.compile('(\d\d)\.(\d\d)\.(\d\d)')
    
    with open(url,'r',encoding='utf-8') as f_in:
        for line in f_in:
            line = line.rstrip()
            filds = line.split('$')
            p = pattern_date.search(filds[1])
            date_ = "20{}-{}-{}".format(p.group(3), p.group(2), p.group(1))
            sql = "INSERT INTO source (date, org, sum) VALUES (?,?,?);"
            update.execute(sql,(date_, filds[3], float(filds[4].replace(',','.'))))



if __name__ == '__main__':                                                      # ОСНОВНОЙ ЦИКЛ
    main()
